• MICRO-GUIDA SULLA CORREZIONE DI PICCOLI BUGS CREATI DA FILE *.IPS. --------------------------------------------------------------------------------------------------------------------- Scritta da _Psyco_ www.psyco.clomax.it fera.82@libero.it --------------------------------------------------------------------------------------------------------------------- INDICE: 1) INDICAZIONI RELATIVE ALLA GUIDA; 2) PREMESSA; 3) FILES NECESSARI; 4) LOCALIZZARE L'INTERVALLO DELLA PATCH CHE GENERA IL BUG; 5) CORREGGERE IL BUG; 6) NOTE. --------------------------------------------------------------------------------------------------------------------- 1) INDICAZIONI RELATIVE ALLA GUIDA: • A COSA SERVE: Serve per capire come poter individuare (ed eventualmente correggere) quale punto (con una precisione che è virtualmente del 100%) di una patch genera un bug/crash nel gioco patchato. • PER QUANTO RIGUARDA LA CORREZIONE DEL BUG: - QUESTO DOCUMENTO NON E' UTILE QUANDO: - La patch manda subito in crash la rom; - QUESTO DOCUMENTO NON CREDO SIA MOLTO UTILE QUANDO: - la patch modifica testo e/o grafica compressa; } In questi casi si può localizzare il punto della patch che - la patch modifica pesantemente la grafica; } genera il bug, ma può diventare molto complesso correggerlo. - QUESTO DOCUMENTO E' UTILE QUANDO: - Non si vuole ricominciare da capo una traduzione ormai finita e molto lunga e Si è modificato soprattutto testo non compresso. ---------------------------------------------------------------------------------------------------------------------- 2) PREMESSA: Il metodo successivamente descritto dipende dalla grandezza della patch (più grande è e più è lungo il lavoro), può risultare molto faticoso e snervante, e si basa sul metodo di applicazioni di modifiche tra 2 file col metodo IPS. Indicativamente per correggere 2 bugs in una patch da 262500 bytes circa (di praticamente solo testo) con questo metodo, ho impiegato circa 3 ore ( :O !! MA mi sono risparmiato la fatica di rifarla da capo ;D ). ---------------------------------------------------------------------------------------------------------------------- 3) FILES NECESSARI: Hai bisogno di: - La rom originale senza bug (controllate per sicurezza il checksum della rom); - La rom patchata con il file ips in questione; - La patch che genera il bug/crash; - Un savestates creato con la rom originale di poco prima del verificarsi del bug/crash; - una calcolatrice scientifica; - (eventuale) La tbl che hai usato per trovare i testi. - Un editor non esadecimale tipo il translhexction 1.6. - Il thingy (caspita ma sto programma si usa per ogni cosa!!) - Un emulatore. ---------------------------------------------------------------------------------------------------------------------- 4) LOCALIZZARE L'INTERVALLO DELLA PATCH CHE GENERA IL BUG: LA logica di questo metodo si basa sulla logica aritmetica delle classi contigue. IPOTESI: la patch ha le dimensioni totale di 500kb. 1) Taglia a metà la patch in modo da averne una grande 250kb. 2) Applica tale patch ad una copia della rom originale e verifica con il savestates se il bug si verifica ancora oppure no. 3) Se si genera, scarta la patch da 500kb e tieni quella da 250kb: è tra questi 250000 bytes che si genera il bug. NOTA: (può essere che il bug sia generato anche da una serie di bytes che si accavallano tra l'offset 250000 e i bytes successivi: in questo caso sei davvero sfigato. Prova allora allora a lavorare su una patch un pò più grande di 250000 bytes; ad esempio su una da 255kb.) 4) taglia la patch da 250 bytes in 2. Ne avrai così una da 125kb. 5) rifatti una copia della rom originale e applicaci la nuova ips da 125kb. 6) Se noti che il bug non si verifica più, allora il bug viene generato in un punto della patch che varia dal byte numero 125000 a quello numero 250000. Altrimenti il bug viene verificato nei primi 125kb della patch da 500kb. 6 + N) Procedi con questa logica fino ad arrivare ad un punto in cui i due files *.IPS siano molto simili in termini di dimensioni. Ad esempio vanno bene coppie di IPS da 45bytes e 60bytes, oppure da 114500bytes e 114440bytes. Insomma devono differire del minor numero di bytes possibile (minor è il numero di bytes di cui differiscono e meno bytes dovrai poi analizzare). IN QUESTO MODO HAI ISOLATO L'OFFSET DELLA PATCH CHE GENERA IL BUG/CRASH CERCATO. ---------------------------------------------------------------------------------------------------------------------- 5) CORREGGERE IL BUG: Una volta caricata la tbl, sei in grado di vedere bytes, in termini di testo, che hai cambiato dalla rom originale. Se ad esempio hai cambiato "START" con "PARTI", visualizzerai da qualche parte nel file *.ips la scritta "PARTI". Ora Dovresti cercare di notare un serie di 5 bytes sparsi (di solito 2, o più generlamente 3 bytes -dipende dalla grandezza della rom-) che non si visualizzano nonostante la tbl già caricata. Mettiamo caso che trovi la scritta "PARTI". Noti che tale scritta è preceduta da "#####". Di questi 5 bytes i primi 3 indicano l'offset HEX in cui inizia la modifica nella rom originale della parola "START" con la parola "PARTI"; gli altri 2 sono la lunghezza dei bytes contigui che vengono modificati. Se prima di start trovi questi 5 bytes: "1567430005" vuol dire che la parola "START" modificata dalla parola "PARTI" nella rom originale inizia nell'offset HEX "156743" (cioè 1402691 in cifre decimali), e che i bytes modificati di seguiti a partire da questo offset sono appunto 0005, cioè 5, proprio come la lunghezza della parola PARTI. A questo punto dovresti andare per tentativi (DI NUOVO! TUTTO QUESTO METODO E' UN CONTINUO TENTATIVO!!) alla ricerca di uno più bytes all'interno di parti di testo tradotto o anche totalmente isolati (Siamo quindi fuori dei banchi di testo) che non hanno nulla a che vedere con una traduzione. Se poi trovi qualche byte sospetto, apri col thingy la rom patchata e quella originale, cerca in entrambe l'offset trovato col metodo qui sopra spegato, e prova a cambiare i bytes della rom patchata con quelli che trovi nell'originale (ma trascriviti su un foglio cosa modifichi). • Adesso: - se il bug è ancora presente, rimodifica i bytes appena toccati e ritenta con qualche altro bytes o gruppo di bytes sospetti; - se il bug non è più presente, ciò significa che sei riuscito a correggerlo: COMPLIMENTI!! --------------------------------------------------------------------------------------------------------------------- 6) NOTE: Se avete delle critiche, dei suggerimenti, delle correzioni o pensate di poter ampliare questa guida con le vostre esperienze e/o conoscenze, scrivetemi pure a questo indirizzo: fera.82@libero.it